%module OgreCamera

%{
#include "OGRE/OgreCamera.h"
	%}

%import "OgrePrerequisites.i"
%import "OgreVector3.i"
%import "OgreQuaternion.i"
%import "OgreSceneNode.i"
 //%import "OgreViewPort.i"
%import "OgreSceneManager.i"
%import "OgreFrustum.i"

/*
#include "OgreMatrix4.h"

#include "OgrePlane.h"

#include "OgreCommon.h"
#include "OgreFrustum.h"
#include "OgreRay.h"
#include "OgrePlaneBoundedVolume.h"
*/

namespace Ogre {

	%nodefaultctor Camera;
	class Camera : public Frustum
	{

	public:

        Camera( const String& name, SceneManager* sm);

//        SceneManager* getSceneManager(void) const;

//        void setPolygonMode(PolygonMode sd);

//        PolygonMode getPolygonMode(void) const;

		void setPosition(Real x, Real y, Real z);

		void setPosition(const Vector3& vec);

		const Vector3& getPosition(void) const;

		void move(const Vector3& vec);

		void moveRelative(const Vector3& vec);

		void setDirection(Real x, Real y, Real z);

		void setDirection(const Vector3& vec);

		Vector3 getDirection(void) const;

		Vector3 getUp(void) const;

		Vector3 getRight(void) const;

		void lookAt( const Vector3& targetPoint );

		void lookAt(Real x, Real y, Real z);

		void roll(const Radian& angle);

		void yaw(const Radian& angle);

		void pitch(const Radian& angle);

		void rotate(const Vector3& axis, const Radian& angle);

		void rotate(const Quaternion& q);

		void setFixedYawAxis( bool useFixed, const Vector3& fixedAxis = Vector3::UNIT_Y );

		const Quaternion& getOrientation(void) const;

		void setOrientation(const Quaternion& q);

		void setAutoTracking(bool enabled, SceneNode* target = 0, 
				     const Vector3& offset = Vector3::ZERO);

		void setLodBias(Real factor = 1.0);

		Real getLodBias(void) const;

		virtual void setLodCamera(const Camera* lodCam);

		virtual const Camera* getLodCamera() const;

//		Ray getCameraToViewportRay(Real screenx, Real screeny) const;

//		void getCameraToViewportRay(Real screenx, Real screeny, Ray* outRay) const;

//		Viewport* getViewport(void) const;

		void setAutoAspectRatio(bool autoratio);

		bool getAutoAspectRatio(void) const;

//		void setCullingFrustum(Frustum* frustum);

//		Frustum* getCullingFrustum(void) const;

		Real getNearClipDistance(void) const;

		Real getFarClipDistance(void) const;

//		const Matrix4& getViewMatrix(void) const;

//		const Matrix4& getViewMatrix(bool ownFrustumOnly) const;
     };

} // namespace Ogre
